package com.ymk.base.mybatis;

import java.util.Collection;
import java.util.List;

/**
 * Created by laborc on 2017/3/27.
 */
public interface IDaoRouter {
    /**
     * 普通查询
     *
     * @param statement  sql语句定义的id
     * @param parameters 参数
     * @return
     */
    public <T> List<T> query(String statement, Object parameters);

    /**
     * 分页查询，注意此处不需要在sql语句中定义startRow和endRow，如果定义，那就用上面的普通查询即可。
     * @param statement
     * @param parameters
     * @param offset
     * @param limit
     * @return
     */
    public <T> List<T> query(String statement, Object parameters, int offset, int limit);

    /**
     * 返回第一条记录查询结果，如果没有就返回null
     * @param statementName
     * @param parameters
     * @return
     */
    public <T> T queryForObject(String statementName, Object parameters);

    /**
     * 更新数据
     * @param statement
     * @param parameters
     * @return
     */
    public int update(String statement, Object parameters);

    /**
     * 删除
     * @param statement
     * @param parameters
     * @return
     */
    public int delete(String statement, Object parameters);

    /**
     * 新增数据，建议在定义sql语句的时候，使用selectKey保证可以返回新增后的主键
     * @param statement
     * @param parameters
     * @return
     */
    public int insert(String statement, Object parameters);


    /**
     * 新增数据，建议在定义sql语句的时候，使用selectKey保证可以返回新增后的主键
     * @param statement
     * @param parameters
     * @return
     */
    public int count(String statement, Object parameters);


    /**
     * 批量删除
     * @param statementName
     * @param dataList
     */
    public void deleteBatch(String statementName, Collection<?> dataList);

    /**
     * 批量新增
     * @param statementName
     * @param dataList
     */
    public void insertBatch(String statementName, Collection<?> dataList);

    /**
     * 批量修改
     * @param statementName
     * @param dataList
     */
    public void updateBatch(String statementName, Collection<?> dataList);
}
